Python Pandas bo'yicha ushbu keng qamrovli qo'llanma yordamida ma'lumotlar to'plamidagi yetishmayotgan ma'lumotlarning murakkabliklarini yengib o'ting. Global auditoriya uchun mos bo'lgan imputatsiya va o'chirishning muhim usullarini o'rganing.
Python Pandas yordamida ma'lumotlarni tozalashni o'zlashtirish: Yetishmayotgan qiymatlarni qayta ishlash bo'yicha global qo'llanma
Ma'lumotlar tahlili va mashinaviy o'qitish sohasida ma'lumotlar sifati eng muhim narsadir. Eng keng tarqalgan muammolardan biri bu yetishmayotgan qiymatlarning mavjudligidir. Ular turli manbalardan, jumladan, ma'lumotlarni kiritishdagi xatolar, sensorlarning nosozliklari yoki to'liq to'ldirilmagan so'rovnomalardan kelib chiqishi mumkin. Yetishmayotgan ma'lumotlarni samarali qayta ishlash ma'lumotlarni tozalash jarayonining muhim bosqichi bo'lib, tahlillaringizning mustahkamligi va modellaringizning aniqligini ta'minlaydi. Ushbu qo'llanma sizga global auditoriya uchun mo'ljallangan kuchli Python Pandas kutubxonasidan foydalangan holda yetishmayotgan qiymatlarni boshqarishning muhim usullarini o'rgatadi.
Nima uchun yetishmayotgan qiymatlarni qayta ishlash shunchalik muhim?
Yetishmayotgan ma'lumotlar natijalaringizni sezilarli darajada buzishi mumkin. Ko'pgina tahliliy algoritmlar va statistik modellar yetishmayotgan qiymatlarni qayta ishlashga mo'ljallanmagan, bu esa xatoliklarga yoki bir tomonlama natijalarga olib keladi. Masalan:
- Bir tomonlama o'rtacha qiymatlar: Agar yetishmayotgan qiymatlar ma'lum guruhlarda to'plangan bo'lsa, o'rtacha qiymatlarni hisoblash populyatsiyaning haqiqiy xususiyatlarini noto'g'ri aks ettirishi mumkin.
- Namuna hajmining qisqarishi: Yetishmayotgan qiymatlarga ega qatorlar yoki ustunlarni shunchaki o'chirish ma'lumotlar to'plamingizni keskin qisqartirishi, bu esa qimmatli ma'lumotlar va statistik quvvatning yo'qolishiga olib kelishi mumkin.
- Model samaradorligining pasayishi: To'liq bo'lmagan ma'lumotlarda o'qitilgan mashinaviy o'qitish modellari yomon bashorat qilish samaradorligi va umumlashtirish qobiliyatini namoyon etishi mumkin.
- Chalg'ituvchi vizualizatsiyalar: Agar yetishmayotgan ma'lumotlar nuqtalari hisobga olinmasa, diagramma va grafiklar noto'g'ri tasvirni taqdim etishi mumkin.
Yetishmayotgan qiymatlarni tushunish va bartaraf etish geografik joylashuvi yoki sohasidan qat'i nazar, har qanday ma'lumotlar bo'yicha mutaxassis uchun asosiy ko'nikmadir.
Pandasda yetishmayotgan qiymatlarni aniqlash
Pandas yetishmayotgan ma'lumotlarni aniqlash uchun intuitiv usullarni taqdim etadi. Yetishmayotgan qiymatlar uchun asosiy ko'rinishlar sonli ma'lumotlar uchun NaN (Not a Number - Raqam Emas) va obyekt ma'lumotlar turlari uchun None hisoblanadi. Pandas ikkalasini ham yetishmayotgan deb hisoblaydi.
isnull() va notnull() usullari
isnull() usuli bir xil shakldagi mantiqiy (boolean) DataFrame qaytaradi, bu yerda qiymat yetishmayotgan bo'lsa True va aks holda False ko'rsatiladi. Aksincha, notnull() yetishmayotgan bo'lmagan qiymatlar uchun True qaytaradi.
import pandas as pd
import numpy as np
# Yetishmayotgan qiymatlarga ega namunaviy DataFrame
data = {'col1': [1, 2, np.nan, 4, 5],
'col2': [np.nan, 'b', 'c', 'd', 'e'],
'col3': [6, 7, 8, np.nan, 10]}
df = pd.DataFrame(data)
print("Asl DataFrame:")
print(df)
print("\nNull qiymatlarni tekshirish:")
print(df.isnull())
print("\nNull bo'lmagan qiymatlarni tekshirish:")
print(df.notnull())
Yetishmayotgan qiymatlarni sanash
Har bir ustundagi yetishmayotgan qiymatlar haqida qisqacha ma'lumot olish uchun isnull() ni sum() usuli bilan birlashtirishingiz mumkin:
print("\nHar bir ustundagi yetishmayotgan qiymatlar soni:")
print(df.isnull().sum())
Ushbu natija har bir ustunda qancha yetishmayotgan yozuv borligini aniq ko'rsatib, muammoning ko'lami haqida tezkor tasavvur beradi.
Yetishmayotgan ma'lumotlarni vizualizatsiya qilish
Kattaroq ma'lumotlar to'plamlari uchun yetishmayotgan ma'lumotlarni vizualizatsiya qilish juda foydali bo'lishi mumkin. missingno kabi kutubxonalar yetishmaslikdagi naqshlarni aniqlashga yordam beradi.
# Bu kutubxonani o'rnatishingiz kerak bo'lishi mumkin:
# pip install missingno
import missingno as msno
import matplotlib.pyplot as plt
print("\nYetishmayotgan ma'lumotlarni vizualizatsiya qilish:")
msno.matrix(df)
plt.title("Yetishmayotgan ma'lumotlar matritsasi")
plt.show()
Matritsa grafigi ma'lumotlar mavjud bo'lgan har bir ustun uchun zich chiziqni va yetishmayotgan joylar uchun siyrak chiziqni ko'rsatadi. Bu yetishmaslik tasodifiy ekanligini yoki biror naqshga amal qilishini aniqlashi mumkin.
Yetishmayotgan qiymatlarni qayta ishlash strategiyalari
Yetishmayotgan ma'lumotlar bilan ishlashning bir nechta keng tarqalgan strategiyalari mavjud. Strategiya tanlovi ko'pincha ma'lumotlarning tabiatiga, yetishmayotgan qiymatlar ulushiga va tahlilingiz maqsadlariga bog'liq.
1. O'chirish strategiyalari
O'chirish yetishmayotgan qiymatlarga ega ma'lumotlar nuqtalarini olib tashlashni o'z ichiga oladi. Bu oddiy tuyulsa-da, uning oqibatlarini tushunish juda muhim.
a. Qatorlarni o'chirish (Listwise Deletion)
Bu eng oddiy yondashuv: kamida bitta yetishmayotgan qiymatga ega bo'lgan butun qatorlarni olib tashlash.
print("\nHar qanday yetishmayotgan qiymatga ega qatorlar o'chirilgandan keyingi DataFrame:")
df_dropped_rows = df.dropna()
print(df_dropped_rows)
Afzalliklari: Amalga oshirish oson, yetishmayotgan qiymatlarni qayta ishlay olmaydigan algoritmlar uchun toza ma'lumotlar to'plamini hosil qiladi.
Kamchiliklari: Ma'lumotlar to'plami hajmining sezilarli darajada qisqarishiga olib kelishi, qimmatli ma'lumotlarni yo'qotishi va agar yetishmaslik butunlay tasodifiy bo'lmasa (MCAR - Missing Completely At Random) bir tomonlamalikka olib kelishi mumkin.
b. Ustunlarni o'chirish
Agar ma'lum bir ustunda yetishmayotgan qiymatlar foizi juda yuqori bo'lsa va tahlilingiz uchun muhim bo'lmasa, butun ustunni o'chirib tashlashni o'ylab ko'rishingiz mumkin.
# Misol: Agar 'col1' da juda ko'p yetishmayotgan qiymatlar bo'lsa, uni o'chirish (faraziy)
# Namoyish uchun, keling, col1 da ko'proq yetishmayotgan ma'lumotlar bo'lgan stsenariy yaratamiz
data_high_missing = {'col1': [1, np.nan, np.nan, np.nan, 5],
'col2': [np.nan, 'b', 'c', 'd', 'e'],
'col3': [6, 7, 8, np.nan, 10]}
df_high_missing = pd.DataFrame(data_high_missing)
print("\ncol1 da yuqori yetishmaslik ehtimoli bo'lgan DataFrame:")
print(df_high_missing)
print("\nHar bir ustundagi yetishmayotgan qiymatlar:")
print(df_high_missing.isnull().sum())
# Aytaylik, yuqori yetishmaslik tufayli col1 ni o'chirishga qaror qildik
df_dropped_col = df_high_missing.drop('col1', axis=1) # axis=1 ustunni o'chirishni bildiradi
print("\ncol1 o'chirilgandan keyingi DataFrame:")
print(df_dropped_col)
Afzalliklari: Agar ustun yetishmayotgan ma'lumotlar tufayli asosan informativ bo'lmasa, samarali.
Kamchiliklari: Qimmatli xususiyatlarning potentsial yo'qolishi. 'Juda ko'p yetishmayotgan qiymatlar' uchun chegara sub'ektivdir.
2. Imputatsiya strategiyalari
Imputatsiya yetishmayotgan qiymatlarni taxminiy yoki hisoblangan qiymatlar bilan almashtirishni o'z ichiga oladi. Bu ko'pincha o'chirishdan afzal ko'riladi, chunki u ma'lumotlar to'plami hajmini saqlab qoladi.
a. O'rtacha/Mediana/Moda bilan imputatsiya
Bu keng tarqalgan va oddiy imputatsiya usuli. Sonli ustunlar uchun yetishmayotgan qiymatlarni o'sha ustundagi yetishmayotgan bo'lmagan qiymatlarning o'rtachasi yoki medianasi bilan almashtirishingiz mumkin. Kategorik ustunlar uchun moda (eng ko'p uchraydigan qiymat) ishlatiladi.
- O'rtacha qiymat bilan imputatsiya: Normal taqsimlangan ma'lumotlar uchun mos keladi. Chetdagi qiymatlarga sezgir.
- Mediana bilan imputatsiya: O'rtacha qiymat bilan imputatsiyaga qaraganda chetdagi qiymatlarga chidamliroq.
- Moda bilan imputatsiya: Kategorik xususiyatlar uchun ishlatiladi.
# Ba'zi NaN qiymatlarga ega asl df dan foydalanish
print("\nImputatsiya uchun asl DataFrame:")
print(df)
# 'col1' dagi yetishmayotgan qiymatlarni o'rtacha qiymat bilan to'ldirish
mean_col1 = df['col1'].mean()
df['col1'].fillna(mean_col1, inplace=True)
# 'col3' dagi yetishmayotgan qiymatlarni mediana bilan to'ldirish
median_col3 = df['col3'].median()
df['col3'].fillna(median_col3, inplace=True)
# 'col2' dagi yetishmayotgan qiymatlarni moda bilan to'ldirish
mode_col2 = df['col2'].mode()[0] # mode() agar tenglik bo'lsa, bir nechta qiymat qaytarishi mumkin
df['col2'].fillna(mode_col2, inplace=True)
print("\nO'rtacha/mediana/moda imputatsiyasidan keyingi DataFrame:")
print(df)
Afzalliklari: Oddiy, ma'lumotlar to'plami hajmini saqlaydi.
Kamchiliklari: Ma'lumotlarning dispersiyasi va kovariatsiyasini buzishi mumkin. O'rtacha/mediana/moda yetishmayotgan ma'lumotlar uchun yaxshi vakillik qiymati deb taxmin qiladi, bu har doim ham to'g'ri bo'lmasligi mumkin.
b. Oldinga to'ldirish va Orqaga to'ldirish
Bu usullar ayniqsa vaqt qatorlari yoki tabiiy tartibga ega ma'lumotlar uchun foydalidir.
- Oldinga to'ldirish (
ffill): Yetishmayotgan qiymatlarni oxirgi ma'lum bo'lgan haqiqiy kuzatuv bilan to'ldiradi. - Orqaga to'ldirish (
bfill): Yetishmayotgan qiymatlarni keyingi ma'lum bo'lgan haqiqiy kuzatuv bilan to'ldiradi.
# ffill/bfill uchun mos bo'lgan yetishmayotgan qiymatlarga ega DataFrame-ni qayta yaratish
data_time_series = {'value': [10, 12, np.nan, 15, np.nan, np.nan, 20]}
df_ts = pd.DataFrame(data_time_series)
print("\nVaqt qatorlari imputatsiyasi uchun asl DataFrame:")
print(df_ts)
# Oldinga to'ldirish
df_ts_ffill = df_ts.fillna(method='ffill')
print("\nOldinga to'ldirishdan keyingi DataFrame:")
print(df_ts_ffill)
# Orqaga to'ldirish
df_ts_bfill = df_ts.fillna(method='bfill')
print("\nOrqaga to'ldirishdan keyingi DataFrame:")
print(df_ts_bfill)
Afzalliklari: Tartiblangan ma'lumotlar uchun foydali, vaqtinchalik munosabatlarni saqlaydi.
Kamchiliklari: Agar yetishmayotgan ma'lumotlarda uzoq bo'shliqlar bo'lsa, noto'g'ri qiymatlarni tarqatishi mumkin. ffill kelajakdagi ma'lumotlarni hisobga olmaydi, bfill esa o'tmishdagi ma'lumotlarni hisobga olmaydi.
c. Groupby yordamida imputatsiya
Murakkabroq yondashuv bu - yetishmayotgan qiymatlarni guruh statistikasi asosida imputatsiya qilish. Bu ayniqsa yetishmaslik ma'lumotlaringizdagi ma'lum bir kategoriya yoki guruh bilan bog'liq deb gumon qilganingizda foydalidir.
data_grouped = {
'category': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'value': [10, 20, np.nan, 25, 15, 30, 12, np.nan]
}
df_grouped = pd.DataFrame(data_grouped)
print("\nGuruhlangan imputatsiya uchun asl DataFrame:")
print(df_grouped)
# Yetishmayotgan 'value' ni har bir 'category' ning o'rtacha 'value' si asosida to'ldirish
df_grouped['value'] = df_grouped.groupby('category')['value'].transform(lambda x: x.fillna(x.mean()))
print("\nGuruhlangan o'rtacha imputatsiyadan keyingi DataFrame:")
print(df_grouped)
Afzalliklari: Guruhlar orasidagi o'zgarishlarni hisobga oladi, ko'pincha global o'rtacha/mediana/modaga qaraganda aniqroq imputatsiyalarga olib keladi.
Kamchiliklari: Tegishli guruhlash o'zgaruvchisini talab qiladi. Juda katta ma'lumotlar to'plamlari uchun hisoblash jihatdan intensiv bo'lishi mumkin.
d. Murakkabroq imputatsiya usullari
Murakkabroq stsenariylar uchun, ayniqsa mashinaviy o'qitish jarayonlarida, ushbu ilg'or usullarni ko'rib chiqing:
- K-Eng Yaqin Qo'shnilar (KNN) Imputeri: Yetishmayotgan qiymatlarni o'qitish to'plamida topilgan K ta eng yaqin qo'shnilarining qiymatlaridan foydalanib to'ldiradi.
- Iterativ Imputer (masalan, MICE - Multiple Imputation by Chained Equations yordamida): Yetishmayotgan qiymatlarga ega har bir xususiyatni boshqa xususiyatlarning funksiyasi sifatida modellashtiradi va imputatsiya uchun iterativ Bayes matritsasini to'ldirishdan foydalanadi.
- Regressiya imputatsiyasi: Yetishmayotgan qiymatlarni regressiya modellari yordamida bashorat qiladi.
Bu usullar odatda Scikit-learn kabi kutubxonalarda mavjud.
# Scikit-learn'ning KNNImputer'idan foydalanish misoli
from sklearn.impute import KNNImputer
# KNNImputer sonli ma'lumotlar bilan ishlaydi. Biz namunaviy sonli DataFrame'dan foydalanamiz.
data_knn = {'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 20, 30, 40, 50],
'C': [100, np.nan, 300, 400, 500]}
df_knn = pd.DataFrame(data_knn)
print("\nKNN imputatsiyasi uchun asl DataFrame:")
print(df_knn)
imputer = KNNImputer(n_neighbors=2) # 2 ta eng yaqin qo'shnidan foydalanish
df_knn_imputed_arr = imputer.fit_transform(df_knn)
df_knn_imputed = pd.DataFrame(df_knn_imputed_arr, columns=df_knn.columns)
print("\nKNN imputatsiyasidan keyingi DataFrame:")
print(df_knn_imputed)
Afzalliklari: Xususiyatlar orasidagi munosabatlarni hisobga olgan holda aniqroq imputatsiyalarni ta'minlashi mumkin.
Kamchiliklari: Hisoblash jihatdan qimmatroq, ehtiyotkorlik bilan amalga oshirishni talab qiladi va xususiyatlar munosabatlari haqidagi taxminlar to'g'ri bo'lishi kerak.
Kategorik ma'lumotlardagi yetishmayotgan qiymatlarni qayta ishlash
Kategorik ma'lumotlar o'ziga xos qiyinchiliklarni keltirib chiqaradi. Moda bilan imputatsiya keng tarqalgan bo'lsa-da, boshqa strategiyalar ham samarali:
- Moda bilan imputatsiya: Yuqorida ko'rsatilganidek, eng ko'p uchraydigan kategoriya bilan to'ldirish.
- Yangi kategoriya yaratish: Yetishmayotgan qiymatlarni alohida kategoriya sifatida ko'rib chiqish (masalan, "Noma'lum", "Yetishmayapti"). Bu, agar ma'lumotning yetishmayotganligi fakti o'zi informativ bo'lsa, foydalidir.
- Boshqa xususiyatlarga asoslangan imputatsiya: Agar kategorik xususiyat va boshqa xususiyatlar o'rtasida kuchli bog'liqlik bo'lsa, yetishmayotgan kategoriyani bashorat qilish uchun klassifikatordan foydalanishingiz mumkin.
data_cat = {'Product': ['A', 'B', 'A', 'C', 'B', 'A', np.nan],
'Region': ['North', 'South', 'East', 'West', 'North', np.nan, 'East']}
df_cat = pd.DataFrame(data_cat)
print("\nKategorik qayta ishlash uchun asl DataFrame:")
print(df_cat)
# 1-strategiya: 'Region' uchun moda bilan imputatsiya
mode_region = df_cat['Region'].mode()[0]
df_cat['Region'].fillna(mode_region, inplace=True)
# 2-strategiya: 'Product' uchun yangi kategoriya yaratish
df_cat['Product'].fillna('Unknown', inplace=True)
print("\nKategorik imputatsiyadan keyingi DataFrame:")
print(df_cat)
Global auditoriya uchun eng yaxshi amaliyotlar va mulohazalar
Turli manbalardan olingan va global auditoriya uchun mo'ljallangan ma'lumotlar bilan ishlaganda, quyidagilarni hisobga oling:
- Ma'lumot manbasini tushunish: Nima uchun qiymatlar yetishmayapti? Bu ma'lum bir mintaqa yoki platformada ma'lumotlar yig'ish bilan bog'liq tizimli muammomi? Kelib chiqishni bilish strategiyangizni yo'naltirishga yordam beradi. Masalan, agar so'rovnoma platformasi ma'lum bir mamlakatda muayyan demografik guruhni doimiy ravishda qamrab ololmasa, bu yetishmaslik tasodifiy bo'lmasligi mumkin.
- Kontekst muhim: Yetishmayotgan qiymatlarni qayta ishlashning 'to'g'ri' usuli kontekstga bog'liq. Moliyaviy model hatto kichik bir tomonlamaliklardan qochish uchun sinchkovlik bilan imputatsiyani talab qilishi mumkin, tezkor tadqiqot tahlili esa oddiyroq usullar bilan kifoyalanishi mumkin.
- Ma'lumotlardagi madaniy nuanslar: Ma'lumotlar yig'ish usullari madaniyatlararo farq qilishi mumkin. Masalan, "daromad" qanday hisobot qilinishi yoki "qo'llanilmaydi" umumiy javob ekanligi turlicha bo'lishi mumkin. Bu yetishmayotgan qiymatlarni qanday talqin qilish va qayta ishlashga ta'sir qilishi mumkin.
- Vaqt zonalari va ma'lumotlarning kechikishi: Turli vaqt zonalaridan kelib chiqqan vaqt qatorlari ma'lumotlari uchun ffill/bfill kabi vaqtga asoslangan imputatsiya usullarini qo'llashdan oldin ma'lumotlarning standartlashtirilganligini (masalan, UTC ga) ta'minlang.
- Valyuta va birliklar: Turli valyutalar yoki birliklarni o'z ichiga olgan sonli qiymatlarni imputatsiya qilganda, imputatsiyadan oldin izchillikni yoki tegishli konvertatsiyani ta'minlang.
- Qarorlaringizni hujjatlashtiring: Yetishmayotgan ma'lumotlarni qayta ishlash uchun ishlatgan usullaringizni har doim hujjatlashtiring. Bu shaffoflik takrorlanuvchanlik va boshqalarning tahlilingizni tushunishi uchun juda muhimdir.
- Iterativ jarayon: Ma'lumotlarni tozalash, shu jumladan yetishmayotgan qiymatlarni qayta ishlash, ko'pincha iterativ jarayondir. Siz bir usulni sinab ko'rishingiz, uning ta'sirini baholashingiz va keyin yondashuvingizni takomillashtirishingiz mumkin.
- Kutubxonalardan oqilona foydalaning: Pandas sizning asosiy vositangiz, ammo murakkabroq imputatsiya uchun Scikit-learn bebahodir. Ish uchun to'g'ri vositani tanlang.
Xulosa
Yetishmayotgan qiymatlar real dunyo ma'lumotlari bilan ishlashning muqarrar qismidir. Python Pandas ushbu yetishmayotgan yozuvlarni aniqlash, tahlil qilish va qayta ishlash uchun moslashuvchan va kuchli vositalar to'plamini taklif etadi. Siz o'chirishni yoki imputatsiyani tanlaysizmi, har bir usulning o'ziga xos afzalliklari va kamchiliklari bor. Ushbu usullarni tushunib, ma'lumotlaringizning global kontekstini hisobga olgan holda, ma'lumotlar tahlili va mashinaviy o'qitish modellaringizning sifati va ishonchliligini sezilarli darajada oshirishingiz mumkin. Ushbu ma'lumotlarni tozalash ko'nikmalarini o'zlashtirish dunyoning istalgan nuqtasida samarali ma'lumotlar bo'yicha mutaxassis bo'lishning asosidir.
Asosiy xulosalar:
- Aniqlang:
df.isnull().sum()va vizualizatsiyalardan foydalaning. - O'chiring: Ma'lumotlar yo'qolishini hisobga olgan holda
dropna()dan oqilona foydalaning. - To'ldiring: O'rtacha, mediana, moda, ffill, bfill yoki Scikit-learn'dan olingan murakkabroq usullar bilan
fillna()dan foydalaning. - Kontekst muhim: Eng yaxshi strategiya sizning ma'lumotlaringiz va maqsadlaringizga bog'liq.
- Global xabardorlik: Madaniy nuanslar va ma'lumotlarning kelib chiqishini hisobga oling.
Ushbu usullarni amalda qo'llashda davom eting va siz mustahkam data science ish jarayonlari uchun kuchli poydevor yaratasiz.